/**
 * 显示原生Toast提示，统一icon为none
 * @param title 提示内容
 * @param duration 持续时间，默认为2000ms
 */
export const showToast = (title: string, duration: number = 2000) => {
  wx.showToast({
    title,
    icon: "none", // 统一为 none
    duration,
  });
};

/**
 * 显示原生确认弹窗
 * @param title 弹窗标题
 * @param content 弹窗内容
 * @param confirmText 确认按钮文本，默认为“确定”
 * @param cancelText 取消按钮文本，默认为“取消”
 * @returns Promise<boolean> 确认返回true，取消返回false
 */
export const showConfirmDialog = (
  title: string,
  content: string,
  confirmText: string = "确定",
  cancelText: string = "取消"
): Promise<boolean> => {
  return new Promise((resolve) => {
    wx.showModal({
      title,
      content,
      confirmText,
      cancelText,
      success(res) {
        if (res.confirm) {
          resolve(true);
        } else if (res.cancel) {
          resolve(false);
        }
      },
      fail() {
        resolve(false); // 发生错误也视为取消
      },
    });
  });
};

/**
 * 显示加载提示框。支持直接传入字符串作为title，或传入对象进行完整配置。
 * 需要手动调用 hideLoading() 关闭。
 * @param options 提示内容字符串或配置对象
 * @example
 * wxApi.showLoading('数据加载中...');
 * // 模拟异步操作
 * setTimeout(() => {
 *   wxApi.hideLoading();
 *   wxApi.toast('加载完成');
 * }, 2000);
 */
export const showLoading = (
  options: string | ShowLoadingOption
): Promise<void> => {
  const actualOptions: ShowLoadingOption =
    typeof options === "string" ? { title: options } : options;

  return new Promise((resolve, reject) => {
    wx.showLoading({
      ...actualOptions,
      success: () => resolve(),
      fail: (res) => {
        console.error("wxApi.showLoading error:", res);
        reject(res);
      },
    });
  });
};
/**
 * 设置系统剪贴板的内容。
 * @param data 要设置的文本数据
 * @returns Promise<void>
 * @example
 * try {
 *   await wxApi.copyText('这是要复制的内容');
 *   wxApi.toast('内容已复制');
 * } catch (error) {
 *   wxApi.toast('复制失败');
 * }
 */
export const copyText = (data: string): Promise<void> => {
  return new Promise((resolve, reject) => {
    wx.setClipboardData({
      data,
      success: () => resolve(),
      fail: (res) => {
        console.error("wxApi.copyText error:", res);
        reject(res);
      },
    });
  });
};
/**
 * 获取系统剪贴板的内容。
 * @returns Promise<string> 剪贴板中的文本内容
 * @example
 */
export const getClipboardText = (): Promise<string> => {
  return new Promise((resolve, reject) => {
    wx.getClipboardData({
      success: (res) => resolve(res.data),
      fail: (res) => {
        console.error("wxApi.getClipboardText error:", res);
        reject(res);
      },
    });
  });
};
